home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Developer Toolbox 6.1
/
SGI Developer Toolbox 6.1 - Disc 1.iso
/
toolbox
/
src
/
exampleCode
/
opengl
/
2Dwrap
/
ogl
/
twodwrap.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-11-11
|
6KB
|
297 lines
/*
* Copyright (c) 1995, Silicon Graphics, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that the name of Silicon Graphics may not be used in any advertising or
* publicity relating to the software without the specific, prior written
* permission of Silicon Graphics.
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE
* POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* OpenGL(TM) is a trademark of Silicon Graphics, Inc.
*/
/*----------------------------------------------------------------------------
*
* porting layer for two d primitives, (arcs,rects,sbox) (irisGL to openGL)
*
* Yusuf Attarwala
*
*---------------------------------------------------------------------------*/
#include <math.h>
#include <GL/gl.h> /* openGL includes */
#include "twodwrap.h"
#define DTOR 0.017453 /* degrees to radians */
#define DTOR10 0.0017453 /* DTOR by 10 */
#define ARCRES 20 /* default arc resolution */
#define angleToRadian(a) a*DTOR10
void
arc (Coord x, Coord y, Coord radius, Angle start, Angle end)
{
int i;
GLfloat angleS,angleE, incr;
angleS = angleToRadian(start);
angleE = angleToRadian(end);
if (end < start) angleE += 2*M_PI;
incr = (angleE-angleS)/ARCRES;
glBegin(GL_LINE_STRIP);
for (i=-1;i<ARCRES;i++) {
glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
angleS += incr;
}
glEnd();
}
void
arcf(Coord x, Coord y, Coord radius, Angle start, Angle end)
{
int i;
GLfloat angleS,angleE, incr;
angleS = angleToRadian(start);
angleE = angleToRadian(end);
if (end < start) angleE += 2*M_PI;
incr = (angleE-angleS)/ARCRES;
glBegin(GL_TRIANGLE_FAN);
glVertex2f(x,y);
for (i=-1;i<ARCRES;i++) {
glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
angleS += incr;
}
glEnd();
}
void
arcfi( Icoord x, Icoord y, Icoord radius, Angle start, Angle end )
{
arcf((Coord)x,(Coord)y,(Coord)radius,start,end);
}
void
arcfs( Scoord x, Scoord y, Scoord radius, Angle start, Angle end)
{
arcf((Coord)x,(Coord)y,(Coord)radius,start,end);
}
void
arci( Icoord x, Icoord y, Icoord radius, Angle start, Angle end)
{
arc((Coord)x,(Coord)y,(Coord)radius,start,end);
}
void
arcs( Scoord x, Scoord y, Scoord radius, Angle start, Angle end)
{
arc((Coord)x,(Coord)y,(Coord)radius,start,end);
}
void
circ(Coord x, Coord y, Coord radius)
{
int i;
GLfloat angleS, incr;
angleS = 0.0;
incr = (2*M_PI)/ARCRES;
glBegin(GL_LINE_STRIP);
for (i=-1;i<ARCRES;i++) {
glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
angleS += incr;
}
glEnd();
}
void
circf(Coord x, Coord y, Coord radius)
{
int i;
GLfloat angleS, incr;
angleS = 0.0;
incr = (2*M_PI)/ARCRES;
glBegin(GL_TRIANGLE_FAN);
glVertex2f(x,y);
for (i=-1;i<ARCRES;i++) {
glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
angleS += incr;
}
glEnd();
}
void
circfi( Icoord x, Icoord y, Icoord radius)
{
circf((Coord)x,(Coord)y,(Coord)radius);
}
void
circfs( Scoord x, Scoord y, Scoord radius)
{
circf((Coord)x,(Coord)y,(Coord)radius);
}
void
circi( Icoord x, Icoord y, Icoord radius)
{
circ((Coord)x,(Coord)y,(Coord)radius);
}
void
circs( Scoord x, Scoord y, Scoord radius)
{
circ((Coord)x,(Coord)y,(Coord)radius);
}
void
rect( Coord x1, Coord y1, Coord x2, Coord y2)
{
glBegin(GL_LINE_LOOP);
glVertex2f(x1,y1);
glVertex2f(x2,y1);
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
}
void
recti( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
{
glBegin(GL_LINE_LOOP);
glVertex2i(x1,y1);
glVertex2i(x2,y1);
glVertex2i(x2,y2);
glVertex2i(x1,y2);
glEnd();
}
void
rects( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
{
glBegin(GL_LINE_LOOP);
glVertex2s(x1,y1);
glVertex2s(x2,y1);
glVertex2s(x2,y2);
glVertex2s(x1,y2);
glEnd();
}
void
rectf( Coord x1, Coord y1, Coord x2, Coord y2)
{
glBegin(GL_QUADS);
glVertex2f(x1,y1);
glVertex2f(x2,y1);
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
}
void
rectfi( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
{
glBegin(GL_QUADS);
glVertex2i(x1,y1);
glVertex2i(x2,y1);
glVertex2i(x2,y2);
glVertex2i(x1,y2);
glEnd();
}
void
rectfs( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
{
glBegin(GL_QUADS);
glVertex2s(x1,y1);
glVertex2s(x2,y1);
glVertex2s(x2,y2);
glVertex2s(x1,y2);
glEnd();
}
void
sbox( Coord x1, Coord y1, Coord x2, Coord y2)
{
glBegin(GL_LINE_LOOP);
glVertex2f(x1,y1);
glVertex2f(x2,y1);
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
}
void
sboxi( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
{
glBegin(GL_LINE_LOOP);
glVertex2i(x1,y1);
glVertex2i(x2,y1);
glVertex2i(x2,y2);
glVertex2i(x1,y2);
glEnd();
}
void
sboxs( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
{
glBegin(GL_LINE_LOOP);
glVertex2s(x1,y1);
glVertex2s(x2,y1);
glVertex2s(x2,y2);
glVertex2s(x1,y2);
glEnd();
}
void
sboxf( Coord x1, Coord y1, Coord x2, Coord y2)
{
glBegin(GL_QUADS);
glVertex2f(x1,y1);
glVertex2f(x2,y1);
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
}
void
sboxfi( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
{
glBegin(GL_QUADS);
glVertex2i(x1,y1);
glVertex2i(x2,y1);
glVertex2i(x2,y2);
glVertex2i(x1,y2);
glEnd();
}
void
sboxfs( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
{
glBegin(GL_QUADS);
glVertex2s(x1,y1);
glVertex2s(x2,y1);
glVertex2s(x2,y2);
glVertex2s(x1,y2);
glEnd();
}